package simple.array;

import java.util.*;

/**
 * @Desc <a href="https://leetcode.cn/problems/intersection-of-two-arrays/">349. 两个数组的交集</a>
 * 给定两个数组 nums1 和 nums2 ，返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
 * 示例 1：
 *   输入：nums1 = [1,2,2,1], nums2 = [2,2]
 *   输出：[2]
 * 示例 2：
 *   输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
 *   输出：[9,4]
 *   解释：[4,9] 也是可通过的
 * 提示：
 *   1 <= nums1.length, nums2.length <= 1000
 *   0 <= nums1[i], nums2[i] <= 1000
 * @Date 2023/2/7 17:04
 * @Created by 刘学松
 */
public class 两个数组的交集 {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        for (int num : nums1) {
            set1.add(num);
        }
        Set<Integer> set2 = new HashSet<>();
        for (int num : nums2) {
            if (set1.contains(num)) {
                set2.add(num);
            }
        }
        int[] arr = new int[set2.size()];
        int i = 0;
        for (Integer integer : set2) {
            arr[i++] = integer;
        }
        return arr;
    }

    /**
     * 更快
     * @param nums1
     * @param nums2
     * @return
     */
    public int[] intersection1(int[] nums1, int[] nums2) {
        int[] arr = new int[1001];
        for (int num : nums1) {
            arr[num]++;
        }
        int[] arr2 = new int[1001];
        int index = 0;
        for (int num : nums2) {
            if (arr[num] != 0) {
                arr2[index++] = num;
                arr[num]--;
            }
        }
        return Arrays.copyOf(arr2, index);
    }
}
